#include <iostream>
using namespace std;

// 声明模板类的虚拟类型时 可以使用 typename 也可以使用class
// 建议大家使用 typename 和前面模板函数用法保持一致 
template <typename T>
class Node{
    public:
        T data;
        Node *next;
        Node(){}
        Node(T d):data(d), next(nullptr){}
        ~Node(){}
        // 类内声明
        void show();
};

// 类外定义的写法
// 类外定义时 需要重新声明虚拟类型
// 并且在 类名后面需要加 类型形参表
template <typename T>
void Node<T>::show(){
    cout << data << endl;
}

int main(int argc, const char *argv[]){
    // 存 int
    Node<int> node_1(10);
    node_1.show();

    // 存 char
    Node<char> node_2('A');
    node_2.show();

    // 存 double
    Node<double> node_3(3.14);
    node_3.show();
    
    return 0;
}